package com.xpffly.design.state.service;

import com.xpffly.design.state.service.impl.State1;
import com.xpffly.design.state.service.impl.State2;

/**
 * @Author: 午夜学徒
 * @Date: 2022/4/5 22:36
 * @Description：具体环境角色 注意事项：
 * 1、把状态对象声明为静态常量，有几个状态就声明为几个静态常量
 * 2、环境角色具有状态抽象角色定义的所有行为，具体执行使用委托方式
 */
public class Context {
    /**
     * 定义状态1
     */
    public final static State STATE1 = new State1();
    /**
     * 定义状态2
     */
    public final static State STATE2 = new State2();
    /**
     * 当前状态
     */
    private State curState;

    public State getCurState() {
        return curState;
    }

    /**
     * 设置当前状态
     *
     * @param curState
     */
    public void setCurState(State curState) {
        this.curState = curState;
        // 切换状态
        this.curState.setContext(this);
    }

    /**
     * 行为委托1
     */
    public void handle1() {
        this.curState.handle1();
    }

    /**
     * 行为委托2
     */
    public void handle2() {
        this.curState.handle2();
    }
}
